package com.xb.system.controller;

import com.xb.model.domain.dto.FilterRequestDTO;
import com.xb.model.domain.dto.FilterResponseDTO;
import com.xb.system.common.result.Result;
import com.xb.system.service.FilterService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

/**
 * 内部API接口
 * 仅供若依项目内部调用，需要携带内部令牌
 * 
 * @author ruoyi
 * @date 2025-10-29
 */
@RestController
@RequestMapping("/internal")
@Slf4j
public class InternalApiController {
    
    @Autowired
    private FilterService filterService;
    
    @Value("${internal.api.token:}")
    private String internalApiToken;
    
    /**
     * 筛选接口（内部）
     * 根据企业名称、法人、联系方式判断是否匹配
     * 
     * @param token 内部令牌
     * @param request 筛选请求参数
     * @return 筛选结果
     */
    @PostMapping("/filter")
    public Result<FilterResponseDTO> filter(
            @RequestHeader(value = "Internal-Token", required = false) String token,
            @RequestBody FilterRequestDTO request) {
        
        log.info("收到内部筛选请求: companyName={}, legalRepresentative={}, phone={}", 
                request.getCompanyName(), request.getLegalRepresentative(), request.getPhone());
        
        // 验证内部令牌
        if (token == null || token.isEmpty()) {
            log.warn("内部API调用失败: 未提供内部令牌");
            return Result.build(null, 401, "未提供内部令牌");
        }
        
        if (!internalApiToken.equals(token)) {
            log.warn("内部API调用失败: 内部令牌验证失败, token={}", token);
            return Result.build(null, 401, "内部令牌验证失败");
        }
        
        // 验证至少有一个查询条件
        if ((request.getCompanyName() == null || request.getCompanyName().trim().isEmpty()) &&
            (request.getLegalRepresentative() == null || request.getLegalRepresentative().trim().isEmpty()) &&
            (request.getPhone() == null || request.getPhone().trim().isEmpty())) {
            
            log.warn("筛选失败: 所有查询条件都为空");
            return Result.build(null, 400, "至少需要提供企业名称、法定代表人或联系方式其中之一");
        }
        
        try {
            // 调用筛选服务
            boolean isMatch = filterService.checkMatch(request);
            
            // 构造响应
            FilterResponseDTO response = new FilterResponseDTO();
            response.setSuccess(true);
            response.setResult(isMatch ? 1 : 0);
            response.setMessage(isMatch ? "匹配成功" : "不匹配");
            response.setTotalCount(isMatch ? 1 : 0);  // ⚠️ 重要：匹配时返回1用于扣费
            
            log.info("筛选成功: result={}, message={}", response.getResult(), response.getMessage());
            
            return Result.ok(response);
            
        } catch (Exception e) {
            log.error("筛选失败: ", e);
            return Result.build(null, 500, "筛选失败: " + e.getMessage());
        }
    }
    
    /**
     * 健康检查接口
     * 
     * @return 健康状态
     */
    @GetMapping("/health")
    public Result<String> health() {
        return Result.ok("jlh-backend internal API is running");
    }
}

